﻿/*
 * Created by SharpDevelop.
 * User: Miguel
 * Date: 05/10/2011
 * Time: 02:42 a.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;
using Business_Entity;
using Business_Logic;

namespace PetSoft.GUI.Compras
{
	/// <summary>
	/// Description of GUIProveedor.
	/// </summary>
	public partial class GUIProveedor : Form
	{
		private BEProveedor proveedorSeleccionado;
		private Boolean nuevo;
		private List<BEProductoProveedorCompras> productosxproveedor;
        private List<BEProducto> productos;
        private BEProducto productoSeleccionado;
        String RucAnterior; 
		
		public GUIProveedor(Boolean nuevo)
		{
			try{
			InitializeComponent();
			cargarKeys();
			if (nuevo){
            CodigoTB.ReadOnly=true;
            CodigoTB.Enabled = false;
            productosTP.Enabled=false;
            EditarBTN.Enabled = false;
            this.ProveedorTC.TabPages.Remove(productosTP);
                       
			}
			
			}catch(Exception ex){
				Utils.MessageError("",ex);
			}
			//
			// TODO: Add constructor code after the InitializeComponent() call.
			//
		}
        public GUIProveedor(BEProveedor beP)
		{
        	try{
        	InitializeComponent();
        	this.AgregaProductoBTN.Enabled=false;
			this.EliminarProductoBTN.Enabled=false;
			this.EditarPrecioBTNB.Enabled=false;
			this.AceptarBTN.Enabled=false;
			this.EditarBTN.Enabled=false;
        	for (int i=0;i<BLInfo.usuarioActual.Rol.Privilegio.Count;i++){
	                if ((new BLPrivilegio()).existePrivilegio(2,"COMP","PROV",BLInfo.UsuarioActual.Rol.Privilegio)){
	                   
					this.AgregaProductoBTN.Enabled=true;
					this.EliminarProductoBTN.Enabled=true;
					this.EditarPrecioBTNB.Enabled=true;
					this.AceptarBTN.Enabled=true;
					this.EditarBTN.Enabled=true;	
					
					}
        			if ((new BLPrivilegio()).existePrivilegio(1,"COMP","PROV",BLInfo.UsuarioActual.Rol.Privilegio)){
			     	           									
	                }
	            }
        	
        	
            cargarKeys();
            BEProveedor proveedor = beP;
            //MessageBox.Show("" + proveedor.IdProv + " " + proveedor.Ruc + " " + proveedor.RazonSocial + " " + proveedor.Direccion + " " + proveedor.Telefono + " " + proveedor.Contacto + " " + proveedor.TelefonoContacto);

            this.proveedorSeleccionado = beP;
            this.nuevo = false;
            this.CodigoTB.Text = beP.IdProv.ToString();
            this.RUCTB.Text = beP.Ruc;
            this.RazonSocialTB.Text = beP.RazonSocial;
            this.DireccionTB.Text = beP.Direccion;
            this.TelefonoTB.Text = beP.Telefono;
            this.TelfContactoTB.Text = beP.TelefonoContacto;
            this.ContactoTB.Text = beP.Contacto;
            this.AceptarBTN.Enabled = false;
            RucAnterior= beP.Ruc.ToString();
            
            cargarProductosVersion2_Edu();
            //cargarProductos();
			}catch(Exception ex){
				Utils.MessageError("",ex);
			}
        }
		
		void GUIProveedorLoad(object sender, EventArgs e)
		{
			
		}
		
		
        private void CancelarBTN_Click(object sender, EventArgs e)
        {
	       this.Close();
        }

         private void AceptarBTN_Click(object sender, EventArgs e)
        {
         	try{
                if (
                    /*(CodigoTB.Text == "") ||*/ (RUCTB.Text == "") || (RazonSocialTB.Text == "") ||
                    (TelefonoTB.Text == "") ||(ContactoTB.Text == "") || (TelfContactoTB.Text == "") ||
                    (DireccionTB.Text == "")             
                    )
                {
         		Utils.MessageAviso("No ha completado todos los datos");
                
        	    } else if(CodigoTB.Text == "" ) {

	         		if (RUCTB.TextLength != 11) {Utils.MessageAviso("El RUC debe tener 11 digitos"); return; }
	         		
	         		BLProveedor BLtemporal = new BLProveedor();
	         		
	         		if (BLtemporal.existeRUC(RUCTB.Text.ToString())) {Utils.MessageAviso("El RUC ya esta siendo utilizado"); return; }
	         		
	         		if (Utils.MessagePregunta("¿Está seguro que desea registrar al Proveedor?"))
                         {
                         int resultado;//Se requiere un valor inicial simulado.
                         BEProveedor beProveedor = new BEProveedor(0, RUCTB.Text, RazonSocialTB.Text, DireccionTB.Text, TelefonoTB.Text,
                                                                  ContactoTB.Text, TelfContactoTB.Text,'A');

                         resultado = BLtemporal.AgregarProveedor(beProveedor);

                         if (resultado == 1)
                         {  Utils.MessageInformation("Nuevo proveedor registrado");
                         	this.Close(); }

                         else if (resultado == 2)
                         	Utils.MessageAviso("El proveedor ya existe");
                         else
                             Utils.MessageError("Error de registro de proveedor");
                         }
				} else {
                        if (RUCTB.TextLength != 11) {Utils.MessageAviso("El RUC debe tener 11 digitos"); return; }
        		    	
                        BLProveedor BLtemporal = new BLProveedor();
                        
                        if(!RucAnterior.Equals(RUCTB.Text.ToString())){
                        	if (BLtemporal.existeRUC(RUCTB.Text.ToString())) {Utils.MessageAviso("El RUC ya esta siendo utilizado"); return; }
                           }
                        if (Utils.MessagePregunta("¿Está seguro que desea actualizar al Proveedor?"))
                        {
                        int resultado;
                        BEProveedor beProveedor = new BEProveedor(int.Parse(CodigoTB.Text), RUCTB.Text, RazonSocialTB.Text, DireccionTB.Text, TelefonoTB.Text,
                                                       ContactoTB.Text, TelfContactoTB.Text,'A');

                        resultado = BLtemporal.ActualizarProveedor(beProveedor);

                        if (resultado == 1)
                        { Utils.MessageInformation("Proveedor actualizado"); this.Close(); }
                        else
                       		Utils.MessageError("Error al actualizar el Proveedor");
                        }
        		}
        	}catch(Exception ex){
				Utils.MessageError("",ex);
			}
           
         }
         	
        

        private void EditarBTN_Click(object sender, EventArgs e)
        {
            this.habilitarTextBoxs();
        }

        private void CodigoTB_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {

        }
		
		
		
		void ProductosTPClick(object sender, EventArgs e)
		{
		    if (nuevo == false) {
               
                cargarProductos();
            }
		}

        private void datosProveedorTP_Click(object sender, EventArgs e)
        {

        }

        public void habilitarTextBoxs()
        {
        	try{
	        	this.CodigoTB.Enabled = false;
	            this.RUCTB.Enabled = true;
	            this.RazonSocialTB.Enabled = true;
	            this.DireccionTB.Enabled = true;
	            this.TelefonoTB.Enabled = true;
	            this.TelfContactoTB.Enabled = true;
	            this.ContactoTB.Enabled = true;
	            this.AceptarBTN.Enabled = true;
            }catch(Exception ex){
				Utils.MessageError("",ex);
			}
       
        }

        public void deshabilitarTextBoxs()
        {
        	try{
	            this.CodigoTB.Enabled = false;
	            this.RUCTB.Enabled = false;
	            this.RazonSocialTB.Enabled = false;
	            this.DireccionTB.Enabled = false;
	            this.TelefonoTB.Enabled = false;
	            this.TelfContactoTB.Enabled = false;
	            this.ContactoTB.Enabled = false;
    		}catch(Exception ex){
				Utils.MessageError("",ex);
			}        
         }
        
        public void cargarProductos()
        {
        	try{
            ProductoDGV.Rows.Clear();
            //MessageBox.Show("Entra");
            Business_Logic.BLProveedor BLtemporal = new BLProveedor();
            productosxproveedor = BLtemporal.BuscarProductosxProveedor(int.Parse(CodigoTB.Text),true);
            productos=BLtemporal.BuscaProductos("","","");
                        
            foreach (BEProductoProveedorCompras prodprov in productosxproveedor)
            {	
                foreach (BEProducto product in productos)
                {	
                	if (prodprov.CodigoProducto==product.Codigo){
                	  
                	  ProductoDGV.Rows.Add();
                	 
	                  DataGridViewRow row = ProductoDGV.Rows[ProductoDGV.Rows.Count - 1];

                      row.Cells["codigo"].Value = product.Codigo;
                      row.Cells["nombre"].Value = product.Nombre;
                      row.Cells["tipoProducto"].Value = product.TipoProducto.Descripcion;
                      row.Cells["descripcion"].Value = product.Descripcion;
                      row.Cells["precio"].Value = prodprov.Precio;
                      
               	    }
           		 }
            }
            }catch(Exception ex){
				Utils.MessageError("",ex);
			}
        }

        public void cargarProductosVersion2_Edu()

        {
        	try{
	        	ProductoDGV.Rows.Clear();
	            Business_Logic.BLProveedor BLtemporal = new BLProveedor();
	            int codigoProv=this.proveedorSeleccionado.IdProv;
	            productos = BLtemporal.BuscaProductosVer2_Edu(codigoProv);
	
	            this.CantidadLB.Text = productos.Count.ToString();
	            foreach (BEProducto product in productos)
	                {
	                        ProductoDGV.Rows.Add();
	
	                        DataGridViewRow row = ProductoDGV.Rows[ProductoDGV.Rows.Count - 1];
                            row.Cells[0].Value = false;
	                        row.Cells["codigo"].Value = product.Codigo;
	                        row.Cells["nombre"].Value = product.Nombre;
	                        row.Cells["tipoProducto"].Value = product.TipoProducto.Descripcion;
	                      //  row.Cells["unidad"].Value=product.Unidad;
	                        row.Cells["descripcion"].Value = product.Descripcion;
	                        row.Cells["precio"].Value = BLtemporal.getPrecio(product.Codigo,codigoProv);
	                        //row.Cells["seleccionar"]
	
	                    }
	
	            if (ProductoDGV.Rows.Count > 0)
	            {
	                ProductoDGV.Rows[0].Selected = true;
	            }
            
            }catch(Exception ex){
				Utils.MessageError("",ex);
			}
         }
                
     	public void VerProductoBTNClick(object sender, EventArgs e)
		{
			cargarProductos();
		}
		
		public void EliminarProductoBTNClick(object sender, EventArgs e)
		{
		  try{
			int cont2 = 0;
            //int pos = 0;
            List<int> indiceProductos = new List<int>();

            foreach (DataGridViewRow fila in ProductoDGV.Rows)
            {
                if (fila.Cells[0].Value != null && (bool)fila.Cells[0].Value)
                {
                    cont2++;
                    indiceProductos.Add(int.Parse(fila.Cells[1].Value.ToString()));
                }
            }

            if (cont2 == 0)
            {	Utils.MessageAviso("Debe seleecionar al menos un Producto");
            }
            else if (cont2 > 0)
            {
            	if (Utils.MessagePregunta("¿Está seguro que desea eliminar el(o los) Producto(s) seleccionado(s)?"))
                {
                  
                    BLProveedor blTemporal = new BLProveedor();
                    foreach (int indice in indiceProductos)
                     {
                        int idProducto = indice;//int.Parse(ProductoDGV[0, indice].Value.ToString());
                        blTemporal = new BLProveedor();
                        blTemporal.EliminarProducto(idProducto, this.proveedorSeleccionado.IdProv);
                     }
                    cargarProductosVersion2_Edu();
                }
			
            }
			}catch(Exception ex){
				Utils.MessageError("",ex);
			}
		}

		
		public void AgregaProductoBTNClick(object sender, EventArgs e)
		{
			try{
				GUIBuscarProductosCompras guiBP=new GUIBuscarProductosCompras(int.Parse(CodigoTB.Text));
				guiBP.ShowDialog(this);
	            cargarProductosVersion2_Edu();
			}catch(Exception ex){
				Utils.MessageError("",ex);
			}
            //cargarProductos();
		}

        private void EditarPrecioBTNB_Click(object sender, EventArgs e)
        {
        	try{
            int cont2 = 0;
            int aux = 0;
            int pos = 0;

            foreach (DataGridViewRow fila in ProductoDGV.Rows)
            {
                if (fila.Cells[0].Value != null && (bool)fila.Cells[0].Value)
                {
                    cont2++;
                    pos = aux;
                }
                aux++;
            }

            if (cont2 == 0)
            {	Utils.MessageAviso("Seleccione un Producto");
            }
            else if (cont2 == 1)
            {
                DataGridViewRow fila = ProductoDGV.Rows[pos];
                if (fila.Cells[0].Value != null && (bool)fila.Cells[0].Value)
                {
                	if (Utils.MessagePregunta("¿Está seguro que desea editar el Precio del Producto?"))
                    {
                        int idProducto = int.Parse(ProductoDGV[1, pos].Value.ToString());
                        String nombre = ProductoDGV[2, pos].Value.ToString();
                        String descripcion = ProductoDGV[4, pos].Value.ToString();
                        String antiguoPrecio = ProductoDGV[5, pos].Value.ToString();
                        GUIEditarPrecioProductoProveedor guiEd = new GUIEditarPrecioProductoProveedor(idProducto, this.proveedorSeleccionado.IdProv, nombre, descripcion, antiguoPrecio);
                        guiEd.ShowDialog(this);
                        cargarProductosVersion2_Edu();
                        //cargarProductos();
                    }
                }



            }else if (cont2 > 1)
                {	Utils.MessageAviso("Seleccione sólo un Producto");
                }

            
            }catch(Exception ex){
				Utils.MessageError("",ex);
			}
        	}

        private void allCheckCB_CheckedChanged(object sender, EventArgs e)
        {
        	try{
            for (int i = 0; i < this.ProductoDGV.RowCount; i++)
            {
                this.ProductoDGV[0, i].Value = this.allCheckCB.Checked;
                //list[0, i].Value = ((CheckBox) list.Controls.Find("checkboxHeader", true)[0]).Checked;    		
            }

			}catch(Exception ex){
				Utils.MessageError("",ex);
			}

        }
        
		 private void cargarKeys(){
        	try{
      		//this.CodigoTB.KeyPress+=new KeyPressEventHandler(Utils.SoloNumerosTB);
			//this.codigoTB.ShortcutsEnabled=false;
			this.RazonSocialTB.KeyPress+=new KeyPressEventHandler(Utils.NoCaracteresRarosTB);
			this.RazonSocialTB.ShortcutsEnabled=false;
			this.RUCTB.KeyPress+=new KeyPressEventHandler(Utils.SoloNumerosTB);
			this.RUCTB.ShortcutsEnabled=false;
			this.ContactoTB.KeyPress+=new KeyPressEventHandler(Utils.SoloLetrasTB);
			this.ContactoTB.ShortcutsEnabled=false;
            this.TelfContactoTB.KeyPress += new KeyPressEventHandler(Utils.SoloNumerosTB);
			this.TelfContactoTB.ShortcutsEnabled=false;
            this.TelefonoTB.KeyPress += new KeyPressEventHandler(Utils.SoloNumerosTB);
			this.TelefonoTB.ShortcutsEnabled=false;
			this.DireccionTB.KeyPress+=new KeyPressEventHandler(Utils.NoCaracteresRarosTB);
			this.DireccionTB.ShortcutsEnabled=false;
			}catch(Exception ex){
				Utils.MessageError("",ex);
			}	
        
        
        
        }
															
	

        public void ProductoDGV_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            try
            {
                int fila = ProductoDGV.CurrentRow.Index;
                if ((bool)(ProductoDGV[0, fila].Value))
                {
                    ProductoDGV[0, fila].Value = false;
                }
                else
                {
                    ProductoDGV[0, fila].Value = true;
                }

            }
            catch (Exception ex)
            {
                Utils.MessageError("", ex);
            }
        }
               
        
   }
}

